// 1、调用fork函数创建一个新的进程
// 2、分别在子进程和父进程中进行相应的操作，可以继续调用fork函数创建一个新的就进程
//    也可以调用exec函数族进行相应的操作，然后调用exit函数族退出相应的进程
// 3、调用wait函数族销毁进程

/* 父进程首先通过fgets函数从用户输入终端（键盘）读取一个要执行的命令，然后创建一个子进程来执行这个命令
 * 并且将该命令的执行返回值返回给父进程，在父进程中打印输出该返回值
 * */
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <time.h>
#include <unistd.h>
#include <error.h>
#include <sys/types.h>
#include <string.h>

int main(){
	pid_t pid;
	char command[256];
	int rtn;
	// 创建子进程
	pid = fork();

	if(pid < 0){
		printf("子进程创建失败!\n");
		return -1;
	}else if(pid == 0){
		printf("此时为子进程！\n");
		
		printf("请输入要执行的命令>\n");
		
		fgets(command,256, stdin);
		
		//printf("strlen(command) = %d\n", strlen(command));
		//printf("command[] = %c\n", command[strlen(command)-1]);
		
		// 需要在最后加上0，否则无法正确读取命令
		command[strlen(command)-1] = 0;
		execlp(command, command, NULL);
	
		// 如果exec函数返回，表明没有正常执行命令，打印错误信息
		perror(command);
		exit(1);
	}else{
		wait(&rtn);
		printf("此时为父进程!\n");
		// 打印子进程的返回值
		printf("子进程返回%d\n", rtn);
		exit(0);
	}

	return 0;
}
